/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package serveur;

import java.io.Serializable;
import java.util.concurrent.*;

/**
 *
 * @author vargasch
 */
public class Utilisateur implements Serializable {

    private transient Chat chat ;
    private transient TraitementClient traitementClient ;
    private String pseudo ;
    private String password ; // somme du mot de passe en SHA-256
    private CopyOnWriteArraySet<Canal> listeCanauxSU ;
    private transient CopyOnWriteArraySet<Canal> listeCanaux ;
    private CopyOnWriteArraySet<Canal> canauxInterdits ;

    public Utilisateur(String pseudo, String password, TraitementClient tc) {
        this.pseudo = pseudo;
        this.password = password;
        listeCanauxSU = new CopyOnWriteArraySet<Canal>();
        listeCanaux = new CopyOnWriteArraySet<Canal>();
        canauxInterdits = new CopyOnWriteArraySet<Canal>() ;
        ajouterTraitementClient(tc);
    }

    public String getPseudo() {
        return pseudo;
    }

    public String getPassword() {
        return password;
    }

    /*private static String convertToHex(byte[] data) {
    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < data.length; i++) {
    int halfbyte = (data[i] >>> 4) & 0x0F;
    int two_halfs = 0;
    do {
    if ((0 <= halfbyte) && (halfbyte <= 9))
    buf.append((char) ('0' + halfbyte));
    else
    buf.append((char) ('a' + (halfbyte - 10)));
    halfbyte = data[i] & 0x0F;
    } while(two_halfs++ < 1);
    }
    return buf.toString();
    }*/

    TraitementClient getTraitementClient() {
        return traitementClient;
    }

    public void ajouterCanalInterdit(Canal canal) {
        canauxInterdits.add(canal);
    }

    public void enleverCanalInterdit(Canal canal) {
        canauxInterdits.remove(canal);
    }

    public void ajouterCanal(Canal canal) {
        listeCanaux.add(canal);
    }
    
    public void supprimerCanal(Canal canal) {
        listeCanaux.remove(canal);
    }

    public void ajouterCanalSuperUtilisateur(Canal canal) {
        listeCanauxSU.add(canal);
    }

    public void supprimerCanalSuperUtilisateur(Canal canal) {
        listeCanauxSU.remove(canal);
    }

    public void ajouterTraitementClient(TraitementClient tc) {
        traitementClient = tc;
        tc.ajouterUtilisateur(this);
    }

    public void supprimerTraitementClient() {
        traitementClient.supprimerUtilisateur();
        traitementClient = null;
    }

    public void nettoyerListeCanaux() {
        for(Canal canal:listeCanaux) {
            canal.supprimerUtilisateur(this);
        }
    }

    public CopyOnWriteArraySet<Canal> tesCanaux() {
        return listeCanaux;
    }

    public void modifierParametres(String nouveauPassword) {
        password = nouveauPassword;
    }
}
